package com.foreknow.demo2;

/**
 * Java中的运算符
 * 1. 算术运算符(+ - * / % ++ --)
 *  1.1 ++（自增） -- (自减)     例如： a++(表示变量a先参与运算然后自增加1)    ++a(变量a先自增加1，然后参与运算)    a--   --a
 * 2. 赋值运算符(=)/复合赋值运算符(+=  -=  *=  /=  %=)
 * 3. 比较运算符(> >= < <= != ==)  最终的结果为boolean类型
 * 4. 逻辑运算符(&&  ||   ！)
 *      a && b ： 只有a和b同时为true的时候整个表达式的结果才为true,只有一个为false最终表达式的结果为false
 *      a || b : 只要a和b有一个为true最终表达式的结果就为true
 *      !a : 取反
 * 5. 三目条件运算符（三元运算符）是由? :
 *    语法： int x = (逻辑运算) ? a : b;
 *          当逻辑运算为true的时候 返回 x = a  当逻辑运算为false的时候 返回 x = b
 *          注意 a和b的数据类型一定要与x的类型保持一致
 */
public class OperatorDemo {
    public static void main(String[] args) {

        int i = 7;
        char c = (i % 2 == 0)?'是':'否';
        System.out.println(c);

        System.out.println("------------------------------------------------");
        int aa = 5;
        int bb = 3;
        int cc = 2;

        boolean x1 = (aa > bb) && (bb > cc);
        boolean x2 = (aa > bb) && (bb < cc);
        boolean x3 = (aa > bb) || (bb > cc);
        boolean x4 = (aa > bb) || (bb < cc);
        boolean x5 = (aa < bb) || (bb < cc);
        boolean x6 = !(aa > bb);

        System.out.println(x1);
        System.out.println(x2);
        System.out.println(x3);
        System.out.println(x4);
        System.out.println(x5);
        System.out.println(x6);

        //逻辑运算符会产生短路的情况
        //c = a && b   a = false  b?  c = false     c = a || b  a = true b?  c = true
//        int i = 5;
//        boolean x = (i++ > 5) && (++i < 6);
//        System.out.println(x);
//        System.out.println(i);

        System.out.println("-------------------------------------------------------------");

        //比较运算符(> >= < <= != ==)
        //boolean isRight = aa > bb;
        System.out.println(aa > bb);
        System.out.println(aa >= bb);
        System.out.println(aa < bb);
        System.out.println(aa <= bb);
        System.out.println(aa != bb);
        System.out.println(aa == bb);

        // 赋值运算符(=)/复合赋值运算符

        //bb += aa; //bb = bb + aa
        //bb -= aa;
        //bb *= aa;
        //bb /= aa;
        bb %= aa;
        System.out.println(bb);

        short ss = 35;
        //ss =  ss + 1; 报错了。原因：ss为short类型  而1为int  short+int = int 需要强制类型转换
        ss += 1;
        System.out.println(ss);





        int a = 5;
        int b = 2;
        double d = 2.5;
        double d1 = a + d;
        double d2 = a / d;
        System.out.println(d1);
        System.out.println(d2);
        System.out.println(a % b);
        System.out.println(a * b);

//        int x = 1;
        //int y = (x++);
//        int y = (++x);
//        System.out.println(y);
//        System.out.println(x);

        int k = 1;
        int m = 3;
        int z = 5;

        int h = (k++)+(--m)+(z++)+(++k)+(m--)+(++z);
        //  1  +   2   +  5  +  3   +  2  +  7
        // k=2   m=2    z=6   k=3     m=1      z=7
        System.out.println(h);





    }
}
